package fr.musique.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import fr.musique.bean.Utilisateur;
import fr.musique.bean.Utilisateur.Langue;
import fr.musique.bean.Utilisateur.ReseauSociaux;
import fr.musique.service.UtilisateurService;

@Controller
public class LoginServlet extends MultiActionController {

	@Autowired
	protected UtilisateurService utilisateur;

	@RequestMapping("/Login/new.htm")
	public ModelAndView add(HttpServletRequest request,
			HttpServletResponse response, Utilisateur utilisateur)
			throws Exception {

		// On vérifie que les champs existent
		if (utilisateur.getNom() != null && utilisateur.getPrenom() != null
				&& utilisateur.getPassword() != null
				&& utilisateur.getEmail() != null
				&& utilisateur.getLangue() != null
				&& utilisateur.getWebSite() != null
				&& utilisateur.getDescription() != null
				&& utilisateur.getReseau() != null) {

			// On vérifie que les champs sont non vides
			if (!utilisateur.getNom().isEmpty()
					&& !utilisateur.getPrenom().isEmpty()
					&& !utilisateur.getPassword().isEmpty()
					&& !utilisateur.getEmail().isEmpty()
					&& !utilisateur.getWebSite().isEmpty()
					&& !utilisateur.getDescription().isEmpty()) {

				// Sauvegarde en base
				this.utilisateur.save(utilisateur);

				// Mise en session
				HttpSession session = request.getSession();
				session.setAttribute("utilisateur", utilisateur);

				// Redirection - Traitement OK
				request.setAttribute("page", "AccueilUtilisateur");
			} else {
				// Redirection - Traitement Fail
				request.setAttribute("error_compte",
						"Vous n'avez pas rempli tous les champs");
				request.setAttribute("page", "CreerCompte");
			}
		} else {
			// Redirection - Traitement Fail
			request.setAttribute("error_compte",
					"Vous n'avez pas rempli tous les champs");
			request.setAttribute("page", "CreerCompte");
		}

		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Login/connexion.htm")
	public ModelAndView connexion(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// Paramétrage initial de la redirection
		request.setAttribute("page", "AccueilUtilisateur");

		// Récupération des données transmises en POST
		String login = request.getParameter("mail");
		String pass = request.getParameter("pass");

		// Vérification des champs
		if (login != null && pass != null) {
			if (!login.isEmpty() && !pass.isEmpty()) {

				// Parcours de la table Utilisateur
				for (Utilisateur usr : utilisateur.getAll()) {

					if (usr != null) {

						if ((login.compareToIgnoreCase(usr.getEmail()) == 0)
								&& (pass.compareTo(usr.getPassword()) == 0)) {

							/* AUTHENTIFICATION SUCCESSFUL */
							/* Création de la session */
							HttpSession session = request.getSession(true);
							session.setAttribute("utilisateur", usr);
						}
						// Erreur si tous les champs n'ont pas été remplis
						else {
							request.setAttribute("error",
									"Mauvais identifiants, veuillez recommencer ou vous inscrire");
						}
					}
				}
			}
		} else {
			request.setAttribute("error", "Veuillez remplir tous les champs");
		}

		// Redirection
		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Login/creerCompte.htm")
	public ModelAndView creerCompte(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// Récupération des champs de l'enum Langue
		// et mise en tableau
		Langue[] enumerationLangue = Langue.values();
		String[] tabLangue = new String[Langue.values().length];

		int i = 0;

		for (Langue langue : enumerationLangue) {
			tabLangue[i] = langue.toString();
			i++;
		}

		// Récupération des champs de l'enum ReseauSociaux
		// et mise en tableau
		ReseauSociaux[] enumerationReseauSociaux = ReseauSociaux.values();
		String[] tabReseau = new String[ReseauSociaux.values().length];

		int j = 0;

		for (ReseauSociaux reaseau : enumerationReseauSociaux) {
			tabReseau[j] = reaseau.toString();
			j++;
		}

		// Mise en attribut de la requete
		request.setAttribute("enumReseau", tabReseau);
		request.setAttribute("enumLangue", tabLangue);

		// Redirection
		request.setAttribute("page", "CreerCompte");

		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Login/deconnexion.htm")
	public ModelAndView deconnexion(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		HttpSession session = request.getSession(false);

		if (session != null) {
			session.invalidate();
		}

		// Redirection - Traitement Fail
		request.setAttribute("page", "AccueilUtilisateur");

		return new ModelAndView("Accueil");
	}

	@RequestMapping("/Accueil/index.htm")
	public ModelAndView redirection(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		// Redirection - Traitement Fail
		request.setAttribute("page", "AccueilUtilisateur");
		return new ModelAndView("Accueil");
	}

}